package org.hzero.data.permission.builder;


import org.hzero.data.permission.dto.DataPermissionDTO;
import org.hzero.data.permission.dto.OrderColumnDTO;
import org.hzero.data.permission.plugins.function.OrgInfoFunction;
import org.hzero.data.permission.plugins.function.UserInfoFunction;

import java.util.List;

/**
 * 根据权限维度和用户基础信息构造权限对象，可自定义实现
 *
 * @author tianhao.luo@hand-china.com
 */
public interface DataPermissionBuilder<Org, Person> {


    /**
     * 构造连接和条件语句
     *
     * @param dataPermissionOrderList 配置的权限信息
     * @param orgUnitList             组织权限
     * @param orgInfoFunction         组织levelPath获取操作
     * @param userInfoDto             当前用户信息
     * @param userInfoFunction        获取用户基础信息的操作
     * @return 包含了连接和条件的语句
     */
    DataPermissionDTO buildMultipleTableJoinAndWhereSql(List<OrderColumnDTO> dataPermissionOrderList,
                                                        List<Org> orgUnitList,
                                                        OrgInfoFunction<Org> orgInfoFunction,
                                                        Person userInfoDto,
                                                        UserInfoFunction<Person> userInfoFunction);
}
